首页 > 试题广场 >

分割等和子集

[编程题]分割等和子集
  • 热度指数:2076 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个只包含正整数的数组 nums ,请问能否把这个数组取出若干个数使得取出的数之和和剩下的数之和相同。

数据范围: , 数组中的元素满足
示例1

输入

[1,5,11,5]

输出

true

说明

分割为 [1,5,5] 和 [11]   
示例2

输入

[1,2,3,5]

输出

false
class Solution:
    def partition(self , nums: List[int]) -> bool:
        '''找重叠子问题'''
        '''不能只靠脑子想'''
        target = sum(nums)
        if target % 2 != 0:
            return False
        dp = [[0 for line in range(target//2 + 1)] for row in range(len(nums))]
        for i in range (1,target//2 + 1):
            if i < nums[0] :
                dp[0][i] = dp[0][i-1]
            else :
                dp[0][i] = nums[0]
        for i in range(1,len(nums)):
            for j in range(1, target//2 + 1):
                if j < nums[i] :
                    dp[i][j] = dp[i-1][j]
                else:
                    dp[i][j] = max(dp[i-1][j], nums[i] + dp[i-1][j-nums[i]])
        if dp[len(nums)-1][target//2] == target//2:
            return True
        else :
            return False


但是会超时 ,没有做优化。

发表于 2022-07-16 21:52:16 回复(0)

问题信息

难度:
1条回答 1892浏览

热门推荐

通过挑战的用户

查看代码